using System;
using System.Collections.Generic;
using System.Drawing;
namespace Circus.Syntax.CodeCompletion
{
	public interface ICodeCompletionRepository
	{
		event MemberLookupEvent MemberLookup;
		event DescriptionLookupEvent DescriptionLookup;
		bool FillBaseMembers
		{
			get;
			set;
		}
		bool CaseSensitive
		{
			get;
		}
		SyntaxTree SyntaxTree
		{
			get;
		}
		IList<SyntaxTree> SyntaxTrees
		{
			get;
		}
		object GetNodeType(string text, SyntaxNode node, Point position);
		object GetMemberType(string text, SyntaxNode node, ref string name, ref Point position, ref Point endPos, out CodeCompletionScope scope);
		object GetSpecialMemberType(string text, SyntaxNode node, ref string name, ref Point position, ref Point endPos, out CodeCompletionScope scope);
		object GetMethodType(string text, SyntaxNode node, ref string name, ref Point position, ref Point endPos, out int paramIndex, out int paramCount, out CodeCompletionScope scope);
		void FillMembers(SyntaxNode node, Point position, ListMembers members, object member, string name, CodeCompletionScope scope, ref int selIndex);
		void FillMember(ListMembers members, object member, string name, int paramIndex, CodeCompletionScope scope);
		object GetMemberType(SyntaxNode node, Point position, object member, string name, out CodeCompletionScope scope);
		string GetDescription(ListMembers members, SyntaxNode node, object member, string name, bool fullDescription);
		int GetPriority(object member);
		object FindDeclaration(string text, SyntaxNode node, Point position);
		int FindReferences(SyntaxNode node, SyntaxNodes references);
		void RegisterSyntaxTree(SyntaxTree tree);
		bool UnregisterSyntaxTree(SyntaxTree tree);
		void RegisterSnippet(string snippet, bool isStatement);
		bool UnregisterSnippet(string snippet);
		ICodeSnippetsProvider GetCodeSnippets(string language);
	}
}
